package br.com.mtech.ctrlliberty.clientjar.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="tbTelefone")
@SequenceGenerator(name="sqTelefone", sequenceName="sqTelefone", allocationSize=10)
public class TelefoneVO implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5310052884461839184L;

	@Id
	@Column(name="idTelefone")
	@GeneratedValue(generator="sqTelefone", strategy=GenerationType.SEQUENCE)
	private Long id;
	
	@Column(name="nuDDD")
	private String numeroDDD;
	
	@Column(name="nuTelefone")
	private Long numero;
	
	@Column(name="dsTelefone")
	private String descricao;
	
	@ManyToOne
	@JoinColumn(name="idUsuario")
	private UsuarioVO usuario;
	
	@OneToMany(mappedBy="telefone", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
	private List<LigacaoVO> listaLigacao = new ArrayList<LigacaoVO>();
	
	@OneToMany(mappedBy="telefone", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
	private List<MensagemVO> listaMensagem = new ArrayList<MensagemVO>();
	
	@OneToMany(mappedBy="telefone", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
	private List<InternetVO> listaAcesso = new ArrayList<InternetVO>();

	@OneToMany(mappedBy="telefone", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
	private List<AlertaVO> listaAlerta = new ArrayList<AlertaVO>();
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNumeroDDD() {
		return numeroDDD;
	}

	public void setNumeroDDD(String numeroDDD) {
		this.numeroDDD = numeroDDD;
	}

	public Long getNumero() {
		return numero;
	}

	public void setNumero(Long numero) {
		this.numero = numero;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public UsuarioVO getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioVO usuario) {
		this.usuario = usuario;
	}

	public List<LigacaoVO> getListaLigacao() {
		return listaLigacao;
	}

	public void setListaLigacao(List<LigacaoVO> listaLigacao) {
		this.listaLigacao = listaLigacao;
	}
	
	public void addLigacao(LigacaoVO ligacao) {
		ligacao.setTelefone(this);
		this.getListaLigacao().add(ligacao);
	}

	public List<MensagemVO> getListaMensagem() {
		return listaMensagem;
	}

	public void setListaMensagem(List<MensagemVO> listaMensagem) {
		this.listaMensagem = listaMensagem;
	}
	
	public void addMensagem(MensagemVO mensagem) {
		mensagem.setTelefone(this);
		this.getListaMensagem().add(mensagem);
	}

	public List<InternetVO> getListaAcesso() {
		return listaAcesso;
	}

	public void setListaAcesso(List<InternetVO> listaAcesso) {
		this.listaAcesso = listaAcesso;
	}
	
	public void addAcesso(InternetVO acessoInternet) {
		acessoInternet.setTelefone(this);
		this.getListaAcesso().add(acessoInternet);
	}
	
	public List<AlertaVO> getListaAlerta() {
		return listaAlerta;
	}

	public void setListaAlerta(List<AlertaVO> listaAlerta) {
		this.listaAlerta = listaAlerta;
	}
	
	public void addAlerta(AlertaVO alerta) {
		alerta.setTelefone(this);
		this.getListaAlerta().add(alerta);
	}
	

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((numero == null) ? 0 : numero.hashCode());
		result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		TelefoneVO other = (TelefoneVO) obj;
		if (numero == null) {
			if (other.numero != null)
				return false;
		} else if (!numero.equals(other.numero))
			return false;
		if (usuario == null) {
			if (other.usuario != null)
				return false;
		} else if (!usuario.equals(other.usuario))
			return false;
		return true;
	}
}
